<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 我们想批量创建对象  
        // 先有构造函数    

        // 我们想造一辆车  得先有一个工厂  

        // 构造函数就是那个工厂  

        // 本质是函数    将来跟new 一起用   



        // 写法的注意事项:

        // 1 构造函数名字  建议 首字母大写   为了跟普通函数区分 

        // 2. 构造函数内不要写return  
        //      如果写return  返回一个基本数据类型  写了也白写  因为最终返回一个对象 
        //      如果写return  返回一个复杂数据类型  构造函数白写了

        // 3. 必须跟new 一起用  
        // 只有跟new一起用 自动创建并返回一个新的对象 
        //不跟new 一起用  跟普通函数没区别  

        // 4. this  
        //  当一个函数 跟new 一起用  不在是普通函数 (this-> window)
        // 构造函数体内的this 指向 自动创建出来的对象    


        // 我们把创建对象的过程叫 实例化  


        // function fn1(){

        // }


        // function Fn1(){

        // }

        // // Array  Object String Set Map RegExp 
        // // new Array()  new Object() new String()
        
        
        // function Fn1(name,age){
        //     // return 666
        //     // return [1,2,3]
        //     this.dename = name;
        //     this.deage = age;


        // }


        // console.log(Fn1()); // 不跟new 一起用  就是普通函数 
        // var res = new Fn1();

        // console.log(typeof res); // res 是个对象  所以 return  666 白写了
        // console.log(res instanceof Array); // return [1,2,3] 返回数组  
        // 失去了构造函数的意义  

        // var res = new Fn1('张三',18);

        // console.log(res.dename);
        // console.log(res.deage);


        // var res1 = new Fn1('李四',21);

        // console.log(res1.dename);
        // console.log(res1.deage);



        // var Test = (name,age)=>{ this.name = name;this.age = age}
        
        // var o1 = new Test();
        // console.log(o1);
        
        // 箭头函数 不能当做构造函数使用  


        // 复习 this 指向 

        // 全局  this window
        // 普通函数  this  window
        // 对象函数  this  对象本身
        // 定时器   this  window
        // 事件处理函数  this 指向事件源 
        // 箭头函数     this 取决于父作用域的this  自己没有this 
        // 构造函数     this  本次自动创建出来的对象 
    </script>
</body>
</html>